home *** CD-ROM | disk | FTP | other *** search
- #include "42.h"
- #include "42_plugin_manager.h"
- #include "42_plugin_ticker.h"
- #include "42_plugin_life.h"
- #include "42_plugin_clock.h"
- #include "42_plugin_ball.h"
-
- forty_two_plugin_api *plugins[] =
- {
- &plugin_ticker,
- &plugin_life,
- &plugin_clock,
- &plugin_ball
- };
-
- static int plugin_total = 0;
- static DialogPtr plugin_dialog;
-
- extern Boolean gDone;
- extern DialogPtr gMainDialog;
-
- int forty_two_init(DialogPtr dialog)
- {
- int i;
- Handle h;
- Rect r;
- short t;
- PixMap **pix;
-
- plugin_dialog = dialog;
-
- plugin_total = sizeof(plugins) / sizeof(forty_two_plugin_api *);
- if(!plugin_total) return 0;
-
- for(i = 0; i < plugin_total; i++)
- {
- SetPort(plugin_dialog);
-
- GetDialogItem(plugin_dialog,plugins[i]->req_dialog_item,&t,&h,&r);
-
- OffsetRect(&r,-r.left,-r.top);
-
- NewGWorld(&plugins[i]->port,32,&r,nil,nil,newDepth);
-
- if(!plugins[i]->port) return 0;
-
- pix = GetGWorldPixMap(plugins[i]->port);
-
- LockPixels(pix);
-
- plugins[i]->update = forty_two_update;
-
- if(plugins[i]->init) (*plugins[i]->init)();
- }
-
- return 1;
- }
-
- void forty_two_kill(void)
- {
- int i;
-
- for(i = 0; i < plugin_total; i++)
- {
- if(plugins[i]->kill) (*plugins[i]->kill)();
- DisposeGWorld(plugins[i]->port);
- }
-
- plugin_total = 0;
- }
-
- void forty_two_thread(void)
- {
- int i;
-
- if(!forty_two_init(gMainDialog)) return;
-
- while(!gDone)
- {
- YieldToAnyThread();
-
- for(i = 0; i < plugin_total; i++)
- {
- YieldToAnyThread();
- if(plugins[i]->idle1)
- {
- (*plugins[i]->idle1)();
- YieldToAnyThread();
- }
- if(plugins[i]->idle2)
- {
- (*plugins[i]->idle2)();
- YieldToAnyThread();
- }
- }
-
- YieldToAnyThread();
- }
-
- forty_two_kill();
- }
-
- void forty_two_update(forty_two_plugin_api *plugin)
- {
- Handle h;
- Rect rsrc,rdst;
- short t;
-
- if(!plugin->port) return;
-
- GetDialogItem(plugin_dialog,plugin->req_dialog_item,&t,&h,&rdst);
- BlockMove(&rdst,&rsrc,sizeof(Rect));
- OffsetRect(&rsrc,-rdst.left,-rdst.top);
-
- SetPort(plugin_dialog);
- CopyBits(&((GrafPtr)plugin->port)->portBits,&plugin_dialog->portBits,
- &rsrc,&rdst,srcCopy,nil);
-
- if(plugin == &plugin_ball)
- {
- Rect r;
- short t;
-
- GetDialogItem(plugin_dialog,plugin->req_dialog_item,&t,&h,&r);
- InsetRect(&r,-1,-1);
- r.right--;
- FrameRect(&r);
- }
- }
-
- void forty_two_update_all(void)
- {
- int i;
-
- for(i = 0; i < plugin_total; i++)
- {
- if(plugins[i]->update) plugins[i]->update(plugins[i]);
- }
- }
-
- void forty_two_click(Point *pt)
- {
- int i;
- Handle h;
- Rect r;
- short t;
-
- for(i = 0; i < plugin_total; i++)
- {
- GetDialogItem(plugin_dialog,plugins[i]->req_dialog_item,&t,&h,&r);
- if(PtInRect(*pt,&r))
- {
- pt->h -= r.left;
- pt->v -= r.top;
- (*plugins[i]->click)(pt);
- pt->h++;
- (*plugins[i]->click)(pt);
- pt->v++;
- (*plugins[i]->click)(pt);
- pt->h--;
- (*plugins[i]->click)(pt);
- break;
- }
- }
- }